package com.bruce.controller;

import com.bruce.bean.TaskInfo;
import com.bruce.config.QuartzConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 定时任务控制器
 */
@RestController
@RequestMapping("/quartz")
public class QuartzController {

    @Autowired
    QuartzConfig quartzConfig;

    /**
     * 01-开启一个定时任务
     * http://localhost:8080/quartz/start
     * @return
     */
    @RequestMapping("/start")
    public String startQuartzJob() {
        try {
            quartzConfig.startJob();
        } catch (Exception e) {
            e.printStackTrace();
            return "定时任务开启异常~~~";
        }
        return "定时任务开启成功~~~";
    }

    /**
     * 02-暂停任务
     * 不是暂停一个正在执行的任务,而是暂停周期性的调度,让他下一个周期不进行调度
     * http://localhost:8080/quartz/pauseJob?name=job1&group=group1
     * @param name
     * @param group
     * @return
     */
    @RequestMapping("/pauseJob")
    public String pauseJob(String name, String group) {
        try {
            quartzConfig.pauseJob(name, group);
        } catch (Exception e) {
            e.printStackTrace();
            return name + "任务暂停异常";
        } finally {
        }
        return name + "任务被暂停";
    }

    /**
     * 03-查询所有的任务基本信息
     * @return
     */
    @RequestMapping("/infos")
    public List<TaskInfo> getAllJobsInfo() {
        try {
            return quartzConfig.getAllJobsInfo();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 04-恢复某个任务的执行
     * http://localhost:8080/quartz/resumeJob?name=job1&group=group1
     * 暂停不靠谱,只是控制台没输出
     * @param name
     * @param group
     */
    @RequestMapping("/resumeJob")
    public String resumeJob(String name, String group) {
        try {
            quartzConfig.resumeJob(name, group);
        } catch (Exception e) {
            e.printStackTrace();
            return name + "任务被恢复异常!";
        } finally {
        }
        return name + "任务被恢复啦!";
    }

    /**
     * 05-删除某一个任务,就没有该任务信息了
     * @param name
     * @param group
     * @throws Exception
     */
    @RequestMapping("/deleteJob")
    public String deleteJob(String name, String group) {
        try {
            quartzConfig.deleteJob(name, group);
        } catch (Exception e) {
            e.printStackTrace();
            return name + "任务删除异常!";
        } finally {
        }
        return name + "任务被删除啦!";
    }

    /**
     * 06-动态的修改任务执行的表达式，触发规则
     * @param name trigger的名字
     * @param group triggergroup的名字
     * @return
     */
    @RequestMapping("/modifyJob")
    public String modifyJob(String name, String group, String newTime) {
        boolean flag = false;
        try {
            flag = quartzConfig.modifyJob(name, group, newTime);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
        }
        if (flag) {
            return name + "任务时间表达式修改为:" + newTime;
        } else {
            return name + "任务时间表达式失败!";
        }
    }


}
